import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDEField } from './ipsdefield';
import { IPSDERBase } from '../der/ipsderbase';

/**
 *
 * @export
 * @interface IPSLinkDEField
 */
export interface IPSLinkDEField extends IPSDEField {
  /**
   * 实体关系对象
   *
   * @type {IPSDERBase}
   */
  getPSDER(): IPSDERBase | null;

  /**
   * 实体关系对象
   *
   * @type {IPSDERBase}
   */
  get psDER(): IPSDERBase | null;

  /**
   * 实体关系对象（必须存在）
   *
   * @type {IPSDERBase}
   */
  getPSDERMust(): IPSDERBase;

  /**
   * 实际链接物理属性
   *
   * @type {IPSDEField}
   */
  getRealPSDEField(): IPSDEField | null;

  /**
   * 实际链接物理属性
   *
   * @type {IPSDEField}
   */
  get realPSDEField(): IPSDEField | null;

  /**
   * 实际链接物理属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getRealPSDEFieldMust(): IPSDEField;

  /**
   * 实际属性所在实体
   *
   * @type {IPSDataEntity}
   */
  getRealPSDataEntity(): IPSDataEntity | null;

  /**
   * 实际属性所在实体
   *
   * @type {IPSDataEntity}
   */
  get realPSDataEntity(): IPSDataEntity | null;

  /**
   * 实际属性所在实体（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getRealPSDataEntityMust(): IPSDataEntity;

  /**
   * 链接属性
   *
   * @type {IPSDEField}
   */
  getRelatedPSDEField(): IPSDEField | null;

  /**
   * 链接属性
   *
   * @type {IPSDEField}
   */
  get relatedPSDEField(): IPSDEField | null;

  /**
   * 链接属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getRelatedPSDEFieldMust(): IPSDEField;

  /**
   * 链接属性所在实体
   *
   * @type {IPSDataEntity}
   */
  getRelatedPSDataEntity(): IPSDataEntity | null;

  /**
   * 链接属性所在实体
   *
   * @type {IPSDataEntity}
   */
  get relatedPSDataEntity(): IPSDataEntity | null;

  /**
   * 链接属性所在实体（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getRelatedPSDataEntityMust(): IPSDataEntity;
}
